package ar.com.sistventa.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import ar.com.sistventa.dao.UnidadDAO;
import ar.com.sistventa.entities.Unidad;
import ar.com.sistventa.utils.Constantes;

public class UnidadDAOImpl extends EntidadDAOImpl<Unidad> implements UnidadDAO {

	@SuppressWarnings("unchecked")
	@Override
	public List<Unidad> busquedaPorFiltro(String descripcion)
			throws HibernateException {

		List<Unidad> unidades = new ArrayList<Unidad>();

		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Unidad.class);
			criteria.add(Restrictions.like("descripcion", descripcion + "%"));
			criteria.addOrder(Order.asc("descripcion"));

			unidades = (List<Unidad>) criteria.list();

		} catch (Exception e) {
			logger.error("Error en " + getClass());
		} finally {
			this.getSession().close();
		}

		return unidades;
	}

	@Override
	public void bajaLogicaUnidad(Unidad unidad) throws HibernateException {
		unidad.setEstadoLogico(Constantes.BAJA);
		actualizar(unidad);

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Unidad> getAllUnidad() throws HibernateException {
		List<Unidad> unidades = getAll(Unidad.class);

		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Unidad.class);
			criteria.add(Restrictions.eq("estadoLogico", "A"));
			criteria.addOrder(Order.asc("descripcion"));
			unidades = (List<Unidad>) criteria.list();

		} catch (Exception e) {
			logger.error("Error en " + getClass());
		} finally {
			this.getSession().close();
		}

		return unidades;
	}

}
